package org.dllwh.mongo;

import com.mongodb.MongoException;
import com.mongodb.client.ListCollectionNamesIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.util.ArrayList;
import java.util.List;

/**
 * 把今天最好的表现当作明天最新的起点．．～
 * <p>
 * Today the best performance as tomorrow the newest starter!
 *
 * @ClassName Mongo
 * @Description MongoDB 集合操作类
 * @Author: <a href="mailto:duleilewuhen@sina.com">独泪了无痕</a>
 * @Date 2025-08-31 01:54
 * @版本 V 1.0.1
 * @since JDK 17
 */
public class MongoCollectionHelper {

    /**
     * 创建集合
     *
     * @param databaseName   数据库名称
     * @param collectionName 集合名称
     * @return 创建成功返回true，否则返回false
     */
    public static boolean createCollection(String databaseName, String collectionName) throws MongoException {
        MongoDatabase mongoDatabase = MongoDatabaseHelper.selectDatabase(databaseName);
        // 判断集合是否存在
        if (mongoDatabase.listCollectionNames().into(new ArrayList<>()).contains(collectionName)) {
            return false;
        }
        mongoDatabase.createCollection(collectionName);
        return true;
    }

    /**
     * 判断MongoDB中是否存在指定的集合
     *
     * @param databaseName   数据库名称
     * @param collectionName 集合名称
     */
    public static boolean collectionExists(String databaseName, String collectionName) throws MongoException {
        return getCollectionNameList(databaseName).contains(collectionName);
    }

    /**
     * 获取集合
     *
     * @param databaseName   数据库名称
     * @param collectionName 集合名称
     */
    public static MongoCollection<Document> getCollection(String databaseName, String collectionName) throws MongoException {
        MongoDatabase mongoDatabase = MongoDatabaseHelper.selectDatabase(databaseName);
        return mongoDatabase.getCollection(collectionName);
    }

    /**
     * 删除集合
     *
     * @param databaseName   数据库名称
     * @param collectionName 集合名称
     */
    public static void dropCollection(String databaseName, String collectionName) throws MongoException {
        getCollection(databaseName, collectionName).drop();
    }

    /**
     * 显示所有集合
     *
     * @param databaseName 数据库名称
     */
    public static List<String> getCollectionNameList(String databaseName) throws MongoException {
        MongoDatabase mongoDatabase = MongoDatabaseHelper.selectDatabase(databaseName);
        ListCollectionNamesIterable listCollectionNames = mongoDatabase.listCollectionNames();
        return listCollectionNames.into(new ArrayList<>());
    }

    /**
     * 显示所有集合
     *
     * @param databaseName 数据库名称
     * @return
     */
    public static List<Document> getCollectionList(String databaseName) throws MongoException {
        MongoDatabase mongoDatabase = MongoDatabaseHelper.selectDatabase(databaseName);
        return mongoDatabase.listCollections().into(new ArrayList<>());
    }
}
